在“HID 设备类-让PC机找到我们的硬件”一节中,第五步我们修改好的下位机程序在插入主机后提示要求安装驱动程序,现在我们就来完成这个驱动程序。
首先得准备好下位机程序。
1、首先下载上面提到的下位机程序,将其烧到录实验板的主控芯片中,然后将实验板插到电脑上。
HEX文件
源代码
2、打开VC6,选择菜单“DriverStudio”->“DriverWizard”,在下面的对话框中选择“DriverWorks Project”,如下图所示:
3、在下面的对话框中填入工程名,然后点“Next”
4、“Step 2 of 11”设置驱动程序类型,我们选择WDM类型的驱动程序,然后点Next
5、“Step 3 of 11”中选择WDM功能驱动程序
6、“Step 4 of 11”中,一定要选择USB总线,USB Vendor ID和USB Product ID一定要和被驱动的硬件一致,这里的VID是0x0471,PID是0x0666(可以查看设备固件程序设备描述符中的idVendor和idProduct字段取得,也可从设备管理器中找到这个设备的VID和PID)。这里填写的PID和VID是方便生成INF文件使用,所以也可以在以后直接更INF文件
7、“Step 5 of 12”中可以添加所用端点的输入或输出管道,由于USB规定Endpoint0(端点0)是必须存在的默认控制管道,所以我们不需单独对其进行定义,在生成的驱动程序设备类中KusbLowerDevice的实例m_Lower就代表了端点0。这里我们添加两个端点所对应的四个管道
8、“Step 6 of 14”步中使用默认值也可以
9、“Step 7of 14”选择需要处理的IRP
10、“Step 8 of 14”和“Step 9 of 14”:DriverWorks能自动生成批量传输的读和写代码,对于同步传输,可以参考USBISOCH实例,对于中断传输,只需要根据批量传输示例代码作些修改就可以了
11、“Step 10 of 14”直接点Next
12、“Step 11 of 14”也可以直接点Next
13、“Step 12 of 14”:打开设备(Open Device)的方法有两种(最后都用CreateFile函数来打开),一种通过设备连接符(Symbolic Link),另一种是通过Device Interface(不知如何翻译好),第一种方式打开设备所写的代码要比第二种少一些,在后面的例子中我会分别介绍这两种方法。如果选择了“Exclusive”,则此设备在同一时刻只由一个程序打开。
切换到Buffer页,选择“Buffered”选项,对小批量数据的传输,可以选择Buffered,而对于大批量数据的传输最好选择Direct
14、“Step 13 of 14”中可以添加一些自定义的控制请求(一般通过向设备发送厂商请求Vendor Request来实现),应用程序端通过DeviceControl函数来调用这个请求而非WriteFile函数。这里我们添加两个请求,如下所示(IOCTL_LED用来控制扩展板EXT-BOARD-A上的LED状态,IOCTL_GET_KEY用来取得扩展板EXT-BOARD-A上按键状态)
15、最后一步设置如下,最好将FileName项设得简单一点,运行测试程序时能方便一些
16、打开Easy_USB_51_Programer.rc文件,找到
#define VER_FILEDESCRIPTION_STR "Description string for Easy_USB_51_Programer driver"
将其修改为
#define VER_FILEDESCRIPTION_STR "USB"
编译:选择菜单“Driver Studio”->“DDK Build Settings”,查看DDK的路径是否设置正确;然后选择菜单“Build”->“Batch Build”进行编译。
修改自动生成的INF文件,将[string]字段修改如下:
[Strings]
ProviderName= "百合电子工作室"
MfgName= "www.baiheee.com"
DeviceDesc= "Easy USB 51 Programer"
DeviceClassName= "USB"
SvcDesc= "Driver for Easy USB 51 Programer"
将[Version]字段的内容个性如下(影响设备大类):
Class= "USB"
ClassGUID={36fc9e60-c465-11cf-8056-444553540000}
将修改后的INF文件拷贝到驱动程序SYS所在目录。
下载编译好的驱动
下载源代码 (需要放到C:\Easy_USB_51_Programer目录)
然后为我们的设备安装驱动程序,安装过程在这里就不详述了,相信大家都会。当安装好驱动后,在设备管里器里发现多了一个名叫“Easy USB 51 Programer”的设备,如图所示: